home *** CD-ROM | disk | FTP | other *** search
Wrap
var gKeyPressedShow, gKeyPressedSave, gBosskey; var gHotkeys = new Array(); function onLoad() { getHotkeys(); } function getHotkeys() { var mw = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser"); var topmenuid = new Array("file-menu", "edit-menu", "view-menu", "history-menu", "bookmarksMenu", "tools-menu", "helpMenu"); for (var i = 0; i < topmenuid.length; i++) { var menu = mw.document.getElementById(topmenuid[i]); gHotkeys.push("[+]" + menu.getAttribute("accesskey").toUpperCase() + "[+]alt|:|[" + menu.label + "]"); } var tmenuitems = mw.document.getElementsByTagName("menuitem"); var menuitems = new Array(); for (var i = 0; i < tmenuitems.length; i++) if (tmenuitems[i].hasAttribute("key")) menuitems.push(tmenuitems[i]); var tabContextMenu = mw.gBrowser.mStrip.firstChild.nextSibling; tmenuitems = tabContextMenu.getElementsByTagName("menuitem"); for (var i = 0; i < tmenuitems.length; i++) if (tmenuitems[i].hasAttribute("key")) menuitems.push(tmenuitems[i]); var keys = mw.document.getElementsByTagName("key"); for(var i = 0, l = keys.length; i < l; i++) { var keypressed = ""; var array = new Array(); var tmodifiers = keys[i].hasAttribute("modifiers")?keys[i].getAttribute("modifiers").replace("accel", "control"):""; if (tmodifiers.indexOf("control") >= 0) array.push("control"); if (tmodifiers.indexOf("shift") >= 0) array.push("shift"); if (tmodifiers.indexOf("alt") >= 0) array.push("alt"); if (tmodifiers.indexOf("meta") >= 0) array.push("meta"); var modifiers = array.join(","); if (keys[i].hasAttribute("keycode")) keypressed = keys[i].getAttribute("keycode") + "[+][+]"; else if (keys[i].hasAttribute("key")) { keypressed = "[+]" + keys[i].getAttribute("key").toUpperCase() + "[+]"; } if (modifiers) keypressed = keypressed + modifiers; var whatkey; for (var j = 0; j < menuitems.length; j++) { if (menuitems[j].getAttribute("key") == keys[i].id) { whatkey = menuitems[j].label; break; } } if (!whatkey) { if (keys[i].hasAttribute("keytext")) whatkey = keys[i].getAttribute("keytext"); else if (keys[i].hasAttribute("oncommand")) whatkey = keys[i].getAttribute("oncommand"); else if (keys[i].hasAttribute("id")) { whatkey = keys[i].getAttribute("id"); if (whatkey.substr(0, 4) == "key_") whatkey = whatkey.substring(4); } } gHotkeys.push(keypressed + "|:|" + (whatkey?"["+whatkey+"]":"")); } } function recognize(e) { e.preventDefault(); e.stopPropagation(); gKeyPressedShow = getKeyPressed(e, true); gKeyPressedSave = getKeyPressed(e, false); document.getElementById("keyinputbox").value = gKeyPressedShow; } function getKeyPressed(e, toshow) { var keypressed = ""; var array = new Array(); if(e.ctrlKey) array.push(toshow?"Ctrl" :"control"); if(e.shiftKey) array.push(toshow?"Shift":"shift"); if(e.altKey) array.push(toshow?"Alt" :"alt"); if(e.metaKey) array.push(toshow?"Meta" :"meta"); var modifiers = array.join(toshow?" + ":","); if (e.keyCode) { for (var property in KeyEvent) { if (KeyEvent[property] == e.keyCode) { keypressed = toshow?property.replace("DOM_VK_", ""):(property.replace("DOM_", "") + "[+][+]"); break; } } } else if (e.charCode) { var key = String.fromCharCode(e.charCode); keypressed = toshow?(key.toUpperCase()):("[+]" + key.toUpperCase() + "[+]"); } if (modifiers != "") keypressed = toshow?(modifiers + " + " + keypressed):(keypressed + modifiers); return keypressed; } function getKeycode(e) { var co = e.keyCode; if (co == 17 || co == 16 || co == 18 || co == 224) return; //Ctrl,Shift,Alt,Meta gBosskey = e.keyCode; } function onAccept(e) { var eid = window.arguments[0]; if (eid != "e.bosskey.showkey") { var duplicate = duplicatedHotkey(gKeyPressedSave); if (duplicate) { var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); var strings = document.getElementById("key.stringmanager"); if(!prompts.confirm(null, strings.getString("key.duplicated.title"), strings.getString("key.duplicated") + duplicate + "\n ")) { document.getElementById("keyinputbox").focus(); return false; } } } window.opener.document.getElementById(eid).value = gKeyPressedShow; switch (eid) { case "e.block.hotkey": window.opener.stmPref.gBlockHotkey = gKeyPressedShow + "|:|" + gKeyPressedSave; break; case "e.pagelock.hotkey": window.opener.stmPref.gPageLockHotkey = gKeyPressedShow + "|:|" + gKeyPressedSave; break; case "e.bosskey.hidekey": window.opener.stmPref.gBosskeyHidekey = gKeyPressedShow + "|:|" + gKeyPressedSave; break; case "e.bosskey.showkey": window.opener.stmPref.gBosskeyShowkey = gKeyPressedShow + "|:|" + gBosskey + "[+]" + gKeyPressedSave.split("[+]")[2]; break; } } function duplicatedHotkey(photkey) { for (var i = 0; i < gHotkeys.length; i++ ) { var hotkey = gHotkeys[i].split("|:|"); if (photkey == hotkey[0]) return hotkey[1]; } return ""; }